/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package BaseDatos;

import Modelo.RegistroHorario;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Calendar;


public class GestorHorarioTemporal {
    private String URL_Servidor = "localhost";
    private static final String BASE_DATOS = "ADEHO";
    private static final String LOGIN = "root";
    private static final String PASSWORD = "root";
    
    private static final String CMD_GUARDAR_REGISTRO = "Insert into registrohorariotemporal values(?,?,?,?,?,?)";
    private static final String CMD_OBTENER_TODOS_REGISTROS = "select anno,seccion,tiempo,cedula,nombreMateria,idAula from registrohorariotemporal where anno=?";
    private static final String CMD_OBTENER_REGISTRO_DE_SECCION = "SELECT tiempo,cedula,nombreMateria,idAula from registrohorariotemporal where seccion=? AND anno=?";
    private static final String CMD_BORRAR_REGISTRO ="DELETE from registrohorariotemporal where seccion=? and anno=? and tiempo=?";
    private static final String CMD_BORRAR_REGISTRO_INSEGURO = "DELETE from registrohorariotemporal where seccion=?"; 


     public boolean guardarRegistroTemporal(RegistroHorario rh, String diahora) {
        boolean exito = false;
        int registrosActualizados = 0;
        GestorBD bd = null;

        try {
            bd = GestorBD.obtenerInstancia(URL_Servidor);
            Connection cnx = bd.obtenerConexion(BASE_DATOS, LOGIN, PASSWORD);
            
           
            PreparedStatement stm = cnx.prepareStatement(CMD_GUARDAR_REGISTRO);

            stm.clearParameters();
            stm.setString(1, rh.getAnno());
            stm.setString(2, rh.getSeccion());
            stm.setString(3, diahora);
            stm.setString(4, rh.getCedula());
           
            stm.setString(5, rh.getNombreMateria());
            stm.setString(6, rh.getIdAula());

            registrosActualizados = stm.executeUpdate();
            exito = registrosActualizados == 1;
            stm.close();
            
        } catch (Exception e) {
            e.printStackTrace(System.err);
        } finally {
            bd.cerrarConexion();
        }
        return exito;
    }
     
      public boolean borrarRegistroTemporal(String seccion,String anno,String tiempo) {
        boolean exito = false;
        int registrosActualizados = 0;
        GestorBD bd = null;

        try {
            bd = GestorBD.obtenerInstancia(URL_Servidor);
            Connection cnx = bd.obtenerConexion(BASE_DATOS, LOGIN, PASSWORD);
            
           
            PreparedStatement stm = cnx.prepareStatement(CMD_BORRAR_REGISTRO);

            stm.clearParameters();
            stm.setString(1, seccion);
            stm.setString(2, anno);
            stm.setString(3, tiempo);
            

            registrosActualizados = stm.executeUpdate();
            exito = registrosActualizados == 1;
            stm.close();
            
        } catch (Exception e) {
            e.printStackTrace(System.err);
        } finally {
            bd.cerrarConexion();
        }
        return exito;
    }
      
     public ArrayList<RegistroHorario> obtenerTodosLosRegistrosTemporales(String anno) {
        ArrayList<RegistroHorario> registros = new ArrayList();
        GestorBD bd = null;
        try {
            bd = GestorBD.obtenerInstancia(URL_Servidor);
            Connection cnx = bd.obtenerConexion(BASE_DATOS, LOGIN, PASSWORD);
            PreparedStatement stm = cnx.prepareStatement(CMD_OBTENER_TODOS_REGISTROS);
            stm.clearParameters();
            stm.setString(1, anno);
            ResultSet rs = stm.executeQuery();
            String annio = "";
            String seccion = "";
            String tiempo = "";
            String cedula = "";
            String nombreMateria = "";
            String idAula = "";

            while (rs.next()) {
                annio = rs.getString(1);
                seccion = rs.getString(2);
                tiempo = rs.getString(3);
                String dia = tiempo.split("-")[1];
                String hora = tiempo.split("-")[0];
                cedula = rs.getString(4);
                nombreMateria = rs.getString(5);
                idAula = rs.getString(6);
                RegistroHorario rh = new RegistroHorario(seccion, dia, hora, cedula, idAula, getAnnio(),nombreMateria);
                registros.add(rh);
            }
            stm.close();

        } catch (Exception e) {
            e.printStackTrace(System.err);
        } finally {
            bd.cerrarConexion();
        }
        return registros;
    }
     
      public String getAnnio() {
        Calendar c = Calendar.getInstance();
        String annio = Integer.toString(c.get(Calendar.YEAR));
        return annio;
    }
      
      public ArrayList<RegistroHorario> obtenerRegistrosTemporalesDeSeccion(String seccion, String anno) {
        ArrayList<RegistroHorario> registros = new ArrayList();
        GestorBD bd = null;
        try {
            bd = GestorBD.obtenerInstancia(URL_Servidor);
            Connection cnx = bd.obtenerConexion(BASE_DATOS, LOGIN, PASSWORD);
            PreparedStatement stm = cnx.prepareStatement(CMD_OBTENER_REGISTRO_DE_SECCION);
            stm.clearParameters();
            stm.setString(1, seccion);
            stm.setString(2, anno);
            ResultSet rs = stm.executeQuery();

            String tiempo = "";
            String cedula = "";
            String nombreMateria = "";
            String idAula = "";

            while (rs.next()) {
                tiempo = rs.getString(1);
                String dia = tiempo.split("-")[1];
                String hora = tiempo.split("-")[0];;
                cedula = rs.getString(2);
                nombreMateria = rs.getString(3);
                idAula = rs.getString(4);
                RegistroHorario rh = new RegistroHorario(seccion, dia, hora, cedula, idAula, getAnnio(),nombreMateria);
                registros.add(rh);
            }
            stm.close();

        } catch (Exception e) {
            e.printStackTrace(System.err);
        } finally {
            bd.cerrarConexion();
        }
        return registros;
    }
   public void QuitarSafe(){
        
        GestorBD bd = null;
        try {
            bd = GestorBD.obtenerInstancia(URL_Servidor);
            Connection cnx = bd.obtenerConexion(BASE_DATOS, LOGIN, PASSWORD);
            Statement stm = cnx.createStatement();
            stm.executeQuery("SET SQL_SAFE_UPDATES = 0");
           
        } catch (Exception e) {
            e.printStackTrace(System.err);
        } finally {
            bd.cerrarConexion();
        }
      
 }
 
 public boolean borrarRegistroTemporalConSeccion(String seccion) {
        boolean exito = false;
        int registrosActualizados = 0;
        GestorBD bd = null;

        try {
            bd = GestorBD.obtenerInstancia(URL_Servidor);
            Connection cnx = bd.obtenerConexion(BASE_DATOS, LOGIN, PASSWORD);
            
           
            PreparedStatement stm = cnx.prepareStatement(CMD_BORRAR_REGISTRO_INSEGURO);

            stm.clearParameters();
            stm.setString(1, seccion);
            registrosActualizados = stm.executeUpdate();
            exito = registrosActualizados == 1;
            stm.close();
            
        } catch (Exception e) {
            e.printStackTrace(System.err);
        } finally {
            bd.cerrarConexion();
        }
        return exito;
    }

      public boolean ExisteRegistroTemporal(String seccion, String anno){
         GestorBD bd = null;
           try {
            bd = GestorBD.obtenerInstancia(URL_Servidor);
            Connection cnx = bd.obtenerConexion(BASE_DATOS, LOGIN, PASSWORD);
            PreparedStatement stm = cnx.prepareStatement(CMD_OBTENER_REGISTRO_DE_SECCION);
            stm.clearParameters();
            stm.setString(1, seccion);
            stm.setString(2, anno);
            ResultSet rs = stm.executeQuery();
              while (rs.next()) {
               return true;
            }
           
              } catch (Exception e) {
            e.printStackTrace(System.err);
        } finally {
            bd.cerrarConexion();
        }
     return false;
    }


}
